﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DAL.Entity;
using DAL.Persistencia;
using System.IO;

namespace NewTierra.Pages.Servicos
{
    public partial class AddFoto_Servico : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                CarregarListFotos(sender, e);
            }
            lblServicoNomeEnviarVerFotos.Text = Session["nomeServico"].ToString();
        }

        #region Popula Fotos

        //Método para carregar o GridView com a listagem de fotos do banco
        protected void CarregarListFotos(object sender, EventArgs e)
        {
            CarregarFotos(sender, e);
        }

        protected void CarregarFotos(object sender, EventArgs e)
        {
            try
            {
                FotoServicoDAL f = new FotoServicoDAL();

                DataListFotos.DataSource = f.ListarTodos(Convert.ToInt32(Session["IdServico"]));
                DataListFotos.DataBind(); //Desenhar
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        #endregion

        #region Trata Fotos

        protected void UploadFotoServico(object sender, EventArgs e)
        {
            try
            {
                // Get the HttpFileCollection
                HttpFileCollection hfc = Request.Files;
                bool validarfotos = false;

                //Verifica se alguma foto foi adicionada para upload
                if (hfc.Count == 0)
                {   //caso não dispara exceção
                    lblMsgEnviarFotos.Text = "Favor selecionar uma foto primeiro.";
                    return;
                }
                else
                {   //varre todas as foto adicionadas para fazer a regra, caso alguma esteja fora da mesma não
                    //envia foto nenhuma e exibe a exceção
                    for (int j = 0; j < hfc.Count; j++)
                    {
                        if (ValidarFoto(hfc[j]))
                        { validarfotos = true; }
                        else
                        {
                            validarfotos = false;
                            break;
                        }
                    }
                }//Se todas as fotos estiverem dentro da regra começa a rotina para cadastro e upload
                if (validarfotos)
                {   //varre todas as fotos para upload e salvar uma à uma
                    for (int i = 0; i < hfc.Count; i++)
                    {
                        HttpPostedFile hpf = hfc[i];
                        if (hpf.ContentLength > 0)
                        {
                            //Monta o nome da foto único
                            string foto = Convert.ToString(Guid.NewGuid().ToString("n") + ".jpg");
                            //Cria a pasta do servico para galeria de fotos do msmo
                            CriarPastaServico();
                            //salva a foto na pasta
                            hpf.SaveAs(Server.MapPath("~/Galeria/Servicos/") + Session["IdServico"] + "/" + foto);
                            //salva a foto na tabela S_Image
                            SalvarFoto(foto);
                        }
                    }
                    lblMsgEnviarFotos.Text = "Fotos enviadas com sucesso!";
                    CarregarListFotos(sender, e);
                    //setar a primeira foto como principal
                    FotoServicoDAL f = new FotoServicoDAL();
                    f.ImagemPrincipal(Convert.ToInt32(Session["IdServico"]));
                }
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
                return;
            }
        }

        private bool ValidarFoto(HttpPostedFile foto)
        {
            try
            {
                if (foto.FileName.EndsWith(".jpg"))
                {
                    //Verificar o tamanho do Arquivo (Até 1MB)
                    if (FileUpload1.PostedFile.ContentLength <= (1024 * 1024))
                    {
                        return true;
                    }
                    else
                    {
                        lblMsgEnviarFotos.Text = "Selecione apenas imagens de até 1MB.";
                        return false;
                    }
                }
                else
                {
                    lblMsgEnviarFotos.Text = "Selecione apenas imagens jpg.";
                    return false;
                }
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
                return false;
            }
        }

        public bool SalvarFoto(string ImgNome)
        {
            Servicos_Imagem s = new Servicos_Imagem();

            try
            {
                s.Serv_img_capa = "N";
                s.Serv_img_nome = ImgNome;
                s.Serv_img_hupload = Convert.ToString(DateTime.Now);
                s.Servicos_Id = Convert.ToInt32(Session["IdServico"]);

                FotoServicoDAL f = new FotoServicoDAL();

                f.Salvar(s);
                return true;
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
                return false;
            }
        }

        protected void CriarPastaServico()
        {
            string path = ("~/Galeria/Servicos/" + Session["IdServico"]);
            try
            {
                if (!Directory.Exists(Server.MapPath(path)))
                { 
                    Directory.CreateDirectory(Server.MapPath(path)); 
                }
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        protected void ExcluirFoto(object sender, CommandEventArgs e)
        {
            FotoServicoDAL f = new FotoServicoDAL();

            try
            {
                var myId = e.CommandArgument;

                Servicos_Imagem si = f.ObterPorId(Convert.ToInt32(myId));

                if (!ExcluiFotoPasta(si.Serv_img_nome))
                {
                    lblMsgEnviarFotos.Text = "Não foi possível deletar a foto da pasta galeria, tente novamente.";
                }

                f.Excluir(si);

                lblMsgEnviarFotos.Text = "Foto excluída com sucesso.";
                CarregarListFotos(sender, e);
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ("Erro: " + ex.Message);
                return;
            }

        }

        public bool ExcluiFotoPasta(string foto)
        {
            try
            {
                string path = "~/Galeria/Servicos/" + Session["IdServico"] + "/" + foto;
                System.IO.File.Delete(Server.MapPath(path));
                return true;
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
                return false;
            }
        }

        protected void CapaFoto(object sender, CommandEventArgs e)
        {
            try
            {
                FotoServicoDAL f = new FotoServicoDAL();

                f.AddImagemPrincipal(Convert.ToInt32(Session["IdServico"]), Convert.ToInt32(e.CommandArgument));

                lblMsgEnviarFotos.Text = "Foto principal atualizada com sucesso.";
            }
            catch (Exception ex)
            {
                lblMsgEnviarFotos.Text = ex.Message;
            }
        }

        #endregion


    }
}